package com.link2room.soundwave.facade;


import com.link2room.common.dto.param.base.BaseL2rParamDto;
import com.link2room.common.dto.param.base.BaseParamDto;
import com.link2room.common.jpa.result.QueryResult;
import com.link2room.soundwave.dto.param.api.MemeberCardPayApiParamDto;
import com.link2room.soundwave.dto.param.inside.*;
import com.link2room.soundwave.dto.result.base.PmsCouponDto;
import com.link2room.soundwave.dto.result.base.PmsMemberInfoDto;
import com.link2room.soundwave.dto.result.base.PmsPackageDto;

import java.util.List;

/**
 * Created by VegetaKo on 2016/9/18.
 */
public interface IPmsMemberHandlerFacadeService {

    PmsMemberInfoDto checkPMSMemberHandler(MemberLoginInsideParamDto memberLoginParamDto) throws Exception;

    PmsMemberInfoDto bindingPMSMemberHandler(MemberLoginInsideParamDto memberLoginParamDto) throws Exception;

    void unbindingPMSMemberHandler(MemberLoginInsideParamDto memberLoginParamDto) throws Exception;

    QueryResult<PmsCouponDto> getPmsMemberCouponsHandler(MemberLoginInsideParamDto memberLoginParamDto) throws Exception;

    void checkRegisterHandler(MemberLoginInsideParamDto memberLoginInsideParamDto) throws Exception;

    PmsMemberInfoDto newPMSMemberHandler(MemberLoginInsideParamDto memberLoginInsideParamDto) throws Exception;

    com.link2room.soundwave.dto.result.base.PmsMemberPointDto getPmsMemberPointsHandler(MemberLoginInsideParamDto memberLoginParamDto) throws Exception;

    void presentPointHandler(PointPresentUseInsideParamDto pointPresentUseInsideParamDto) throws Exception;

    void usePointHandler(PointPresentUseInsideParamDto pointPresentUseInsideParamDto) throws Exception;

    List<com.link2room.soundwave.dto.result.base.PmsCardPointDto> getPmsMemberPointsDetailHandler(MemberLoginInsideParamDto memberLoginParamDto)throws Exception;

    PmsMemberInfoDto autoMemberHandler(MemberLoginInsideParamDto memberLoginInsideParamDto) throws Exception;

    PmsMemberInfoDto syncMemberHandler(MemberLoginInsideParamDto memberLoginInsideParamDto) throws Exception;

    com.link2room.soundwave.dto.result.base.PmsCardBalanceDto getCardBalanceInfoHandler(MemberLoginInsideParamDto memberLoginInsideParamDto) throws Exception;

    QueryResult<PmsCouponDto> getUsableCouponsHandler(UsableCouopnsInsideParamDto usableCouopnsInsideParamDto) throws Exception;

    /**
     * 获取当前用户pmsmemberInfo
     * @param paramDto
     * @return
     * @throws Exception
     */
    PmsMemberInfoDto getCurrentUserPMSMemberInfoHandler(BaseL2rParamDto paramDto) throws Exception;

    /**
     * 发放电子券
     * @param usableCouopnsInsideParamDto
     * @return
     * @throws Exception
     */
    void onlineSaleCouponHandler(UsableCouopnsInsideParamDto usableCouopnsInsideParamDto) throws Exception;

    void onlineSaleCouponNewHandler(UsableCouopnsInsideParamDto usableCouopnsInsideParamDto) throws Exception;

    /**
     * 会员卡升级
     * @param memberUpgradeInsideParamDto
     * @return
     * @throws Exception
     */
    PmsMemberInfoDto upgradePmsMemberLevelHandler(MemberUpgradeInsideParamDto memberUpgradeInsideParamDto)throws Exception;

    QueryResult<PmsPackageDto> listPmsPackageHandler(BaseParamDto baseParamDto)throws Exception;

    PmsPackageDto getPmsPackageHandler(BaseParamDto baseParamDto)throws Exception;

    void exchangePackageHandler(MemberPackageInsideParamDto memberPackageInsideParamDto)throws Exception;
    
    /**
     * 兑换码领用优惠券
     * @param memberCouponsCodeInsideParamDto
     * @throws Exception
     */
    void coupenCodeCollarCoupenHandler(MemberCoupenCodeCollarCoupenInsideParamDto memberCouponsCodeInsideParamDto) throws Exception;
}
